package com.nageoffer.onecoupon.merchant.admin.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 功能
 * 作者 伟大哥
 * 日期 2025/3/28,22:04
 **/


@Slf4j
@Configuration
public class SwaggerConfiguration implements ApplicationRunner {
    @Value("${server.port:8080}")
    private String severPort ;
    @Value("${server.servlet.context-path:}")
    private String contextPath ;



    /**
     * 配置并返回一个OpenAPI对象，用于描述OneCoupon Merchant Admin API的基本信息。
     * 该函数通过Spring的@Bean注解，将返回的OpenAPI对象注册为Spring容器中的一个Bean，
     * 以便在应用启动时自动加载并配置Swagger文档。
     *
     * @return OpenAPI 返回一个配置好的OpenAPI对象，包含API的标题、描述、版本、服务条款和联系人信息。
     */
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI().info(new Info()
                .title("OneCoupon Merchant Admin API") // 设置API的标题
                .description("OneCoupon Merchant Admin API") // 设置API的描述
                .version("v1.0.0") // 设置API的版本号
                .termsOfService("http://127.0.0.1:8080/doc.html") // 设置API的服务条款链接
                .contact(new io.swagger.v3.oas.models.info.Contact()
                        .name("yuanJW") // 设置API的联系人信息
                )
        );
    }

    /**
     * 重写ApplicationRunner接口的run方法，用于在应用启动时执行特定操作。
     * 该方法主要用于在应用启动后，打印API文档的访问地址。
     *
     * @param args 应用启动时传入的参数，包含命令行参数等信息。
     * @throws Exception 如果在执行过程中发生错误，则抛出异常。
     */
    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 打印API文档的访问地址，包含服务器端口和上下文路径
        log.info("API Document: http:127.0.0.1:{}{}/doc.html", severPort, contextPath);
    }
}
